﻿#ifndef GRAPHICSSCENE_H
#define GRAPHICSSCENE_H

#include <QGraphicsScene>

class Block;
class BlockGroup;
class BlockGroupMove;

class GraphicsScene : public QGraphicsScene
{
    Q_OBJECT
public:
    explicit GraphicsScene(QObject *parent = nullptr);

    void game_start();                       // 开始
    void game_pause(bool flag);              // 游戏暂停/继续
    void set_player(const QString &name);    // 设置玩家姓名
    void statistics_reset();                 // 当前记录重置

signals:
    void showRank(int);
    void gameOver();

private slots:
    void clear_full_rows();
    void slot_game_over(bool isPassed = false);

protected:
    void drawForeground(QPainter *painter, const QRectF &rect);
    void drawBackground(QPainter *painter, const QRectF &rect);

private:
    void scene_init();                            // 背景初始化
    void statistics_reload();                     // 记录加载
    void set_statistics_visible(bool visible);    // 设置记录栏是否隐藏

    QGraphicsTextItem *set_text(QString text, QPointF pos, QFont font, QColor color = Qt::white);

    QGraphicsTextItem *player_item, *time_item, *score_item, *speed_item, *status_item;
    QGraphicsTextItem *pass_item, *tip_item;

    QTimer *stand_timer;                  // 1s钟更新一次时间显示
    QTime game_time;                      // 记录游戏时间
    int score = 0;                        // 分数
    bool is_game_pause = false;           // 游戏暂停
    BlockGroup *nextBlockGroup;           // 下一个方块
    BlockGroupMove *currentBlockGroup;    // 当前控制的方块

    void updateScore(int row_count);              // 更新分数
    QList<QGraphicsItem *> allBlocks();           // 返回所有区域内方块
    void clearAllBlocks();                        // 清除全部方块
    void initGameAtDifficulty(int difficulty);    // 以一定难度初始化游戏

    int m_pass_difficulty = 1;    // 闯关难度(1-10)
    void set_pass_difficulty(int newPass_difficulty);

    QList<QTime> pass_time_list;           // 通每小关时间列表，共十个
    QList<QTime> pass_time_record_list;    // 通每小关时间记录列表，共十个
    QGraphicsTextItem *pass_time_text_current_title, *pass_time_text_record_title;
    QList<QGraphicsTextItem *> pass_time_text_list;
    QList<QGraphicsTextItem *> pass_time_text_current_list;
    QList<QGraphicsTextItem *> pass_time_text_record_list;
    void fresh_time_on_record();       //刷新得分榜时间
};

#endif // GRAPHICSSCENE_H
